home *** CD-ROM | disk | FTP | other *** search
- Interface 2.00
- © Software Interrupt 1990
-
- See notes at end for update info......
-
- This manual and software is public domain. It may be copied and distributed freely
- as long as:
-
- It is not separated from the documentation (except for commercial use)
- The module is not tampered with
- You do not claim that you have written the module
- Do not use any of the code contained in this module in your own code
-
- If you wish to use this in a commercial product please contact me so that I can make
- sure you have the latest release, please send a disk.
-
- In no circumstances shall the author be liable for any damage, loss of profits, time or
- data or any indirect or consequential loss rising out of the use of this software or
- inability to use this software.
-
- Contacts:
- Arcade BBS (081 654 2212)
- The World Of Cryton (0749 679794)
-
- All mail on the above Bulletin Bords should be mailed to JICK
-
- **************** Introduction ***********************************************
-
- Interface is a small module that allows application programmers to implement a
- colourful and pleasant graphical user interface. Interface provides many more
- functions that allows you to change the pointer shape easily and to interface with the
- !Help or !Spy application.
-
- The Interface module provides functions to improve the friendliness and appearance
- of the application. The application should still operate as stated in the Acorn
- guidelines in the Programmers Reference Manuals.
-
- The module implements a number of SWIs which are described further in this
- manual, these SWI calls can be called from any language. Most of the functions
- provided are specified in the icons validation string, and so no complex
- programming is needed to make the application look good.
-
- This guide tells you how to fully implement the features of Interface. It is split into
- the follow sections:
-
- The first section explains the validation strings options provided
- by Interface.
- The next section gives details of the SWI calls provided.
- The remaining section covers hints and tips on programming.
-
-
-
-
-
-
- **************** Technical details ***********************************************
-
- An indirected text icon can have a validation string which is used to pass further
- information to the WIMP, such as what border type the icon has and also what
- pointer, if any should be displayed whilst over this icon. The syntax of a validation
- string is:
-
- validation string ::- command {;command}*
- command ::- (b | z) border-type {border-spec} |
- r on/off-type {,icon-number}* |
- u on/off-type {,icon-number}* |
- p text-string {,x} {,y} |
- i text-string |
- k key-code
- border-spec ::- {,button-slabbing-mask} {,slabbing-time} {,colour}*
-
- The parameters above are described under the relevant validation command.
- In simple terms, a validation string consists of a series of 'commands', each starting
- with a single letter and seperated from the following command by a semi-colon.
- {}* means zero or more of the thing inside the {}. The following commands are
- available with the Interface module.
-
- These commands are provided in addition to the standard Wimp validation strings.
- I suggest that you edit the !FormEd program to allow you to enter larger validation
- strings, otherwise when entering a help command you will only be allowed a
- maximum of 80 characters.
-
- The (B)order command tells Interface which border to use when rendering an icon.
- The border types available at present are :
-
- border type 0, this is a single border used mainly for headings and action icons.
- The icon will slab inwards if the user clicks a button whilst the pointer is over
- the icon providing it is not setup to ignore mouse clicks.
-
- border type 1, this is a double border and should be used to group together
- icons that perform an operation.
-
- border type 2, this is a triple border and should be used on the default action
- button. The icon will slab inwards when the user clicks a button whilst the
- pointer is over this icon providing it is not setup to ignore mouse clicks.
-
- border type 3, this is a wide inverted border and should be used on writable
- icons. This border type is usually used in-conjunction with the writable
- pointer.
-
- border type 4, this is an inverted version of border type 0
-
- border type 5, this is a double wide border as used by acorn in ros 3
-
- border type 6, etched in border
-
- border type 7, similar to border type 0, thinner in mode 20
-
- The second optional parameter is the button slabbing mask, this states whether the
- icon should be slabbed until the button is released. The values contained in this
- parameter can be from 0 to 7. The button slabbing mask can be calculated in the
- following way:
-
- Value Button Meaning
- 1 Adjust slab icon until adjust is released
- 2 Menu slab icon until menu is released
- 4 Select slab icon until select is released
-
- The button slabbing mask can then be calculated by adding together the required
- button values.
-
- The button slabbing time is the minimum time that the icon will be slabbed for, the
- default time is for 15cs. This value is a decimal number in centi-seconds.
- The colours are specified in the following order:
-
- {,border colour1} {,border colour2} {,slabbing out colour}
- {,slabbing in colour} {,inner channel colour}
-
- These colours can be any valid WIMP colour in the range of 0 to 15, the default
- selection is 4, 0, 1, 14, 12.
-
- The (R)adio command specified in the validation string is used to set the state of
- other radio button type icons. The R command is followed by a decimal number in
- the range 0 to 2, the action that these perform is:
-
- Radio type Operation
- 0 this has the effect of switching off the specified icon(s).
- 1 this has the effect of switching on the specified icon(s).
- 2 this has the effect of toggling the icons current state.
-
- This command is then followed by the numbers of the icons you wish to alter, these
- should be separated by commas. This command may be specified more than once in
- a validation string, for example to switch icons 1 & 2 off, 3 & 4 on and toggle the
- state of icons 5 & 6 you could use the following validation string
-
- R0,1,2;R1,3,4;R2,5,6
-
- The (U)nselectable command in the validation string has the effect of shading the
- icon grey so that it cannot be selected by the user. It is followed by a decimal
- number in the range 0 to 2, the action that these is described above in the radio
- command.
-
- This command is then followed by the numbers of the icons you wish to alter, these
- should be separated by commas. This command may be specified more than once in
- a validation string, for example to shade icons 1 & 2, un-shade 3 & 4 and toggle the
- state of icons 5 & 6 you could use the following validation string
-
- U0,1,2;U1,3,4;U2,5,6
-
- The (P)ointer command is used to define a pointer to be displayed when the pointer
- is over that icon. The first parameter is a sprite name to use for the pointer, this
- should be no longer than 12 characters and should be present in the WIMP sprite
- pool. The optional parameters specify the x and y offsets to the active point in the
- sprite, these should be specified in pixels.
-
- The (I)nformation command is used to define a message to be sent to the interactive
- help application when the pointer is over the icon. If you wish to use a semi-colon
- then you must place two next to each other. The maximum length of the help
- message is 235 characters.
-
- The Interface module will change to the specified pointer when the mouse pointer is
- over the icon/workarea, if no pointer is specified then the pointer will default to
- shape one (the default arrow shape). There are 5 pointer shapes designed in the
- sprite file in the !Interface directory, these are:
-
- ptr_write - this pointer should be used on writable icons, the suggested active
- point is at coordinates x = 4, y = 4.
-
- ptr_menu - this pointer is used where a menu can be activated by pressing the
- menu button over the icon. This stops the user having to search all over the
- window to find where the menu is. The suggested active point is x = 6, y = 5.
-
- ptr_direct - this pointer is used where an object may be re-sized, the suggested
- active point is at x = 13, y = 7.
-
- ptr_hand - this pointer is used where and icon may be dragged. It is usually set
- on the workarea, but it can be used on any icon (the save file icon looks great
- when using it), its suggested active point is at x = 12, y = 8.
-
- ptr_cross - this pointer is used as a crosshair, it is the same as the one used in the
- Draw application. This icon gives the user a precise point when working with
- line drawings, its suggested active point is at x = 13, y = 7.
-
- You may also design your own pointers, which should be loaded into the WIMP
- sprite pool. There are a few points that you should note when designing pointers
- these are :
-
- Pointer sprite names should have the form ptr_XXXXX, although this is not
- compulsory it helps so that you do not get confused with pointers and normal
- sprites.
-
- Do not use logical colour 2 in the pointer sprites, as this is unavailable in very
- high resolution modes.
-
- The pointers used should only be valid in your application, so you must not mask
- out the Pointer_Leaving_Window in your application. You should claim
- Null_Reason_Code when passed to your application, otherwise the pointer will not
- change when the pointer is over the icon/workarea, see the examples for more.
-
- You should support the !Help application to help new users using your application,
- this is why I implemented a feature in Interface to make this easier. The following
- was for some reason not published in the Programmers Reference Manuals, but was
- in the pre-release disc version of the manuals.
-
- For an application to use interactive help, two WIMP messages are employed. One
- is used by the Help to request help, and the other is used by the application to return
- the help message.
-
- To request help, the Help application sends a message of the following form:
-
- block +16 &502 - indicates request for help
- +20 mouse x co-ordinate
- +24 mouse y co-ordinate
- +28 mouse button state
- +32 window handle (-1 if not over a window)
- +36 icon handle (-1 if not over an icon)
-
- The WIMP system will pass this message automatically to the task in charge of the
- appropriate window/icon. If the application receiving the message wishes to produce
- some help, it should respond with the following message:
-
- block +16 &503
- +20 help message terminated by 0
-
- This message can be sent to the Help application by using Wimp_SendHelp, which
- is provided by the Interface module (SWI &81687).
-
- The help text may contain any printable character codes. If the sequence |M is
- encountered then this will be treated as a line break and subsequent text will be
- printed on the next line in the window. If the text is too long for one line then it will
- be split at a word boundary (space character).
-
- The text should consist of simple complete English sentences, each starting on a
- new line and ending with a full stop. The sentences should usually be simple
- imperatives or information such as:
-
- Click SELECT to set the alarm.
-
- You are in Select mode.
-
- Click ADJUST to change to path edit mode.
-
- This is the icon for Edit.
-
- In general you need not mention menu entries, except when specific ones interact
- with pointer operations. As a general rule present information of interest to the
- beginner near the top, and expert tips or information lower down.
-
- You must use the terminology defined. For mouse operations you must use initial
- capitals (for example Click). The mouse buttons must be in capitals (for example
- SELECT), as must key names (for example ESC, RETURN, SHIFT, CONTROL, A, B, F1,
- COPY). miss out speedups and shortcuts - just provide enough to help a beginner
- without drowning them with information.
-
- Provide interactive help thoroughly - include the icon bar, and the workarea of all
- your windows. If no actions are possible in a window, just
-
- This window shows....
-
- if better than nothing.
-
- You should assume a user knows:
-
- what a MENU key is
- how to navigate menu trees and choose entries
- what the icon bar is
- how to move/size/toggle/close windows, and so on
- what 'dragging an icon' means
- what 'filling in a field' (writable icon) means
-
- The keycode command should be placed in the icon that is activated by the
- keycode. It should be a decimal integer specifying the key. The up/down
- arrows, tab etc.. are dealt with.
-
-
- **************************** The SWI Calls *********************************
-
- Wimp_BorderIcon (Interface_SlabButton) (SWI &81680)
-
- R1 = pointer to block
- R1 preserved
-
- Interrupts are not defined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- The block contains the following on entry:
-
- R1+0 mouse x (screen coordinates - not window relative)
- R1+4 mouse y
- R1+8 buttons (depending on icon button type)
- R1+12 window handle
- R1+16 icon handle
-
- This call is used to update an icons border. It is typically called as a result of a
- Mouse_Click event, if the icon has a border type of 0 or 2 then the icon will slab
- inwards. The format of the validation string is described in the previous section.
-
- The application should the perform the task and then force the icon to normal status
- by calling Wimp_BorderIcon (SWI &81680) with R1+8 set to 0.
-
- The code to border icons and windows is outlined in the section Programming
- Interface.
-
- Note that the mouse coordinates specified in R1+0 and R1+4 are not used by the
- SWI and are only present to make the block compatible with a Mouse_Click event
- block.
-
- Wimp_BorderWindow (SWI &81681)
-
- None
-
-
-
-
-
- Wimp_BorderWindow (Interface_Render3dWindow) (SWI &81681)
-
- R1 = pointer to block
- R1 preserved
-
- Interrupts are not defined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- The block contains the following on entry:
-
- R1+0 window handle
- R1+4 visible area minimum x coordinate
- R1+8 visible area minimum y coordinate
- R1+12 visible area maximum x coordinate
- R1+16 visible area maximum y coordinate
- R1+20 scroll x offset relative to work area origin
- R1+24 scroll y offset relative to work area origin
- R1+28 current graphics window minimum x coordinate
- R1+32 current graphics window minimum y coordinate
- R1+36 current graphics window maximum x coordinate
- R1+40 current graphics window maximum y coordinate
-
- This call is used to redraw the borders of icons in the window that are not up-to-date,
- this SWI is typically called during the redraw loop of a window. The SWI will
- update the window, drawing borders around any icons which have the b command
- specified in the validation string and are within the specified graphics window.
-
- The code to border icons and windows is outlined in the section Programming
- Interface.
-
- Wimp_BorderIcon (SWI &81680)
-
- None
-
-
-
-
- Wimp_ClaimInterface (Interface_Initialise) (SWI &81682)
-
- R0 = task handle
- R0 preserved
-
- Interrupts are not defined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- This SWI allows your application to use pointers via the Interface module. This
- SWI should be called at the beginning of your program. If you don't use
- Wimp_ClaimInterface then your pointers will not be displayed.
-
- Wimp_ReleaseInterface (SWI &81683)
-
- None
-
-
-
-
- Wimp_ReleaseInterface (Interface_CloseDown) (SWI &81683)
-
- R0 = task handle
- R0 preserved
-
- Interrupts are not defined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- This SWI stops your application from using pointers. When this SWI is called
- Interface Manager will erase any workarea pointers assigned to your application and
- free the memory. This should be called in your exit handler, also if an error occurs
- you should also call this SWI to stop other applications from gaining your pointers.
-
- Wimp_ClaimInterface (SWI &81682)
-
- None
-
-
-
-
- Wimp_SetWorkareaPointer (Interface_SetWorkareaPointer) (SWI &81684)
-
- R1 = pointer to block
- R1 preserved
-
- Interrupt status is undefined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- The block contains the following on entry:
-
- R1+0 window handle
- R1+4 minimum x coordinate of bounding box
- R1+8 minimum y coordinate of bounding box
- R1+12 maximum x coordinate of bounding box
- R1+16 maximum y coordinate of bounding box
- R1+20 24 bytes of pointer data
-
- This specifies the pointer for an area of the window.
- The bounding box coordinates are given relative to the window's work area origin.
- R1+4 to R1+16 can be set to -1 to specify the whole of the window's work area.
- The pointer data at +20 to +44 contains the sprite name and any x, y offset, see
- validation strings for more information.
-
- Wimp_RemoveWorkareaPointer (SWI &81685)
- Wimp_PollPointer (SWI &81686)
-
- None
-
-
-
-
-
- Wimp_RemoveWorkareaPointer (Interface_RemoveWorkareaPointer) (SWI &81685)
-
- R0 = task handle
- R1 = pointer to block
-
- R0 preserved
- R1 preserved
-
- Interrupt status is undefined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI is not re-entrant
-
- The block contains the following on entry:
-
- R1+0 window handle
- R1+4 minimum x coordinate of bounding box
- R1+8 minimum y coordinate of bounding box
- R1+12 maximum x coordinate of bounding box
- R1+16 maximum y coordinate of bounding box
-
- This call removes a previously installed pointer from the list of active pointer areas
- for the specified window. When a window is deleted you should remove any
- pointers that were related to the window, otherwise these pointers may become
- active on any window which gains the same window handle in the future.
-
- The bounding box coordinates are given relative to the window's work area origin.
- R1+4 to R1+16 can be set to -1 to specify the whole of the window's work area.
- R1+4 to R1+16 may be set to 0 to remove all work area pointers assigned to the
- window.
-
- Wimp_SetWorkareaPointer (SWI &81684)
- Wimp_PollPointer (SWI &81686)
-
- None
-
-
-
-
-
- Wimp_PollPointer (Interface_Poll) (SWI &81686)
-
- R0 = Wimp_Poll reason code
- R2 = task handle
-
- R0 preserved
- R@ preserved
-
- Interrupt status is undefined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI not re-entrant
-
- This call checks to see if the pointer is up-to-date. If the pointer is not up-to-date it
- will change to the pointer specified in the icons validation string. If the pointer is
- not over an icon then the pointer will change according to the position on the
- window background.
-
- Note that wimp_poll reason codes 0 and 4 should not be masked out, otherwise the
- pointer will be out-of-date and will not function correctly.
-
- Wimp_SetWorkareaPointer (SWI &81684)
- Wimp_RemoveWorkareaPointer (SWI &81685)
-
- None
-
-
-
-
-
- Wimp_SendInformation (Interface_SendHelp) (SWI &81687)
-
- R1 = message block as returned from help application
- R1 preserved
-
- Interrupt status is undefined
- Fast interrupts are enabled
-
- Processor is in SVC mode
-
- SWI not re-entrant
-
- This call returns a help text message to the interactive help application. It should be
- called when a message with the number &502 is received and the pointer is over an
- icon. If there is a message in the icons validation string that the pointer is currently
- over then this will be sent to the help application. It is up to the applications
- programmer to take care of the help message when the pointer is over the icon on the
- icon bar or is over the window workarea.
-
- None
-
- None
-
-
- Wimp_PreProcessKey (Interface_PreProcessKey) (SWI &81688)
-
- R0 = event type
- R1 = event block
- R2 = task handle
-
- R0 = updated to new event type
- R1 = updated event block
- R2 = 0 if event was not dealt intercepted
-
- This call pre-processes the up, down, tab, shift-tab keys and any specified in a specific icons
- validation string using the command k<keycode>. The SWI will move icon, if neccessary or activate
- a button. This call sould be called after the wimp_poll command, it will match the key to an icon
- and if neccessary modify your wimp poll block and event type.
-
-
- Wimp_BorderPlotIcon (Interface_Plot3dIcon) (SWI &81689)
-
- R0 = window state (either from wimp_update/redraw or from a wimp_getwindowstate)
- R1 = icon block as for Wimp_PlotIcon
-
- This call plots a border on a window like Wimp_PlotIcon. The icon block passed in R1
- should contain a block as described for Wimp_PlotIcon in the PRMs.
-
- Wimp_BorderBoundingBox (Interface_BoundingBox) (SWI &8168A)
-
- R1 = icon block as for Wimp_PlotIcon
-
- R1 = updates icon block
-
- offset
- 0 min x
- 4 min y
- 8 max x
- 12 max y
- 16 border width
- 20 button slab state (1 = out, 0 = in)
-
- This call returns information about the icon block passed to it. If you wish to
- get the size of an icons box use Wimp_GetIconState and then pass the icon block
- returned to this function.
-
-
-
- Changes from version 1.32
-
- this version has been fully re-written using the acorn aof assembler.
- border type has changed to z to avoid conflicts with risc-os 3
- Interface_Plot3dIcon has been changed so the first parameter is a window state block instead of a window handle
- names has changed to interface_...., old names are still supported
- better redraw code to correct problems with multi-sync modes where the icons were not alligned correctly.
- Interface_BoundingBox now returns the state of the button
- new border types
-
- *command to allow changes in the slabbing colours.